#include "../log_all_files/log.h"

/*告诉用户如何进行日志使用提供标准测试用例及使用方法*/

/*enum class Loggertype
{

  LOGGER_SYNC,//同步日志器
  LOGGER_ASYNC//异步日志器

};*/

/*enum class AsyncIsSafe
{
    ASYNC_SAFE,//可能会出现一直阻塞-->实际
    ASYNC_UNSAFE//不会出现一直阻塞-->测试

};*/

/*enum class LevelType
  {
      UNKNOW = 0,
      DEBUG,
      INFO,
      WARN,
      ERROR,
      FATAL,
      OFF // 如果不想输出日志，直接把限制等级改成off(不进行相关日志打印只进行对应限制)
  };*/

int main()
{
   /// 操作1：

   /*默认的root日志器使用方法*/

   // DEBUG("功能测试%s","---testing");

   /*自定义日志器全功能（基于创建日志器加入到manager 由manager中取出指定日志器进行使用）：*/
   //  //创建日志器：
   // Loggerbuilder::ptr gptr = std::make_shared<Globalloggerbuilder>();
   // gptr->Buildloggername("test");                                  // 日志器名称
   // gptr->Buildloggertype(Loggertype::LOGGER_ASYNC);                // 日志器类型（同步还是异步）
   // gptr->Buildloopertype(AsyncIsSafe::ASYNC_UNSAFE);               // 异步日志器才能选择的是缓冲区安全版本还是不安全版本 --->对应会不会一直阻塞 但是扩容并未开启--> 不安全版本：以时间模拟的空间  相当于扩容
   // gptr->Buildformmater("[%d{%H:%M:%S}][%t][%p][%c][%f:%l] %m%n"); // 日志输出格式
   // gptr->Buildlimitlevel(Level::LevelType::INFO);                  // 日志等级（只会输出高于它的日志）
   // // 注册日志落地方式
   // gptr->Buildlogsinks<Stdoutsink>();
   // gptr->Buildlogsinks<Filesink>("./l/test.log");
   // gptr->Buildlogsinks<Rollfilesink>("./l/roll-", 1024);

   // gptr->Build(); // 组合日志组件+添加进loggermanager里
   //                // manager使用：
   // GetLogger("test")->Fatal("功能测试%s", "---testing");

   // 操作2：

   ////基于指挥者模式简化使用示例：
   //  LoggerDirector ld ();---->会被识别成无参函数声明 不能这样定义对象
   LoggerDirector ld ;
   // 默认模式  //root+SYNC+stdout+debug
   //  ld.CreateLogger_Default();
   //  DEBUG("功能测试%s", "---testing");

   // 自定义模式（全输入模式）：

    // 日志器名字 日志器类型 异步选择 格式化模式 日志限制等级
   ld.CreateLogger_Nondefault("test", Loggertype::LOGGER_ASYNC,
                              AsyncIsSafe::ASYNC_UNSAFE, "[%d{%H:%M:%S}][%t][%p][%c][%f:%l] %m%n", Level::LevelType::DEBUG);
  
   ld.Stdout();
   GetLogger("test")->Fatal("功能测试%s", "---testing");
}